import uvicorn
from fastapi import FastAPI
from sql_app.models import models
from sql_app.database import SessionLocal, engine
from sql_app.router import user

models.Base.metadata.create_all(bind=engine)

app = FastAPI()

app.include_router(user.router)

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


# @app.get("/catch-test/", response_model=List[schemas.User])
# async def catch_test(skip: int = 0, limit: int = 100, db: Session = Depends(get_db), cache: Redis = Depends(sys_cache)):
#     await cache.set(name="test_key", value=11, ex=60)
#     res = await cache.get(name="test_key")
#     print(f"res is {res}")
#     users = crud.get_users(db, skip=skip, limit=limit)
#     return users
#
#
# @app.post("/users/", response_model=schemas.User)
# def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
#     db_user = crud.get_user_by_email(db, email=user.email)
#     if db_user:
#         raise HTTPException(status_code=400, detail="Email already registered")
#     return crud.create_user(db=db, user=user)
#
#
# @app.get("/users/", response_model=List[schemas.User])
# def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
#     users = crud.get_users(db, skip=skip, limit=limit)
#     return users
#
#
# @app.get("/users/{user_id}", response_model=schemas.User)
# def read_user(user_id: int, db: Session = Depends(get_db)):
#     db_user = crud.get_user(db, user_id=user_id)
#     if db_user is None:
#         raise HTTPException(status_code=404, detail="User not found")
#     return db_user
#
#
# @app.post("/users/{user_id}/items/", response_model=schemas.Item)
# def create_item_for_user(
#         user_id: int, item: schemas.ItemCreate, db: Session = Depends(get_db)
# ):
#     return crud.create_user_item(db=db, item=item, user_id=user_id)
#
#
# @app.get("/items/", response_model=List[schemas.Item])
# def read_items(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
#     items = crud.get_items(db, skip=skip, limit=limit)
#     return items


if __name__ == '__main__':
    uvicorn.run(app='main:app', host="127.0.0.1", port=8081, reload=True)
